package br.com.imob.bo;


import java.util.ArrayList;
import java.util.List;

import javax.faces.component.UISelectOne;
import javax.faces.event.ActionEvent;
import javax.faces.event.AjaxBehaviorEvent;

import br.com.imob.bo.enums.local.Estados;
import br.com.imob.bo.enums.pessoa.ECivil;
import br.com.imob.bo.enums.pessoa.Regime;
import br.com.imob.bo.enums.pessoa.Sexo;
import br.com.imob.dao.CorretorDao;
import br.com.imob.dao.EstadoDao;
import br.com.imob.dao.PessoaDao;
import br.com.imob.modelo.Bairro;
import br.com.imob.modelo.Cidade;
import br.com.imob.modelo.Contato;
import br.com.imob.modelo.Corretor;
import br.com.imob.modelo.Endereco;
import br.com.imob.modelo.Estado;
import br.com.imob.modelo.Login;
import br.com.imob.modelo.Pais;
import br.com.imob.modelo.Pessoa;

public class PessoaBO {
	
	private PessoaDao pdao;
	private Pessoa pessoa;
	private Corretor corretor;
	
	private Login login;
	private Endereco endereco;
	private Bairro bairro;
	private Cidade cidade;
	private Estado estado;
	private Contato contato;
	private List<Estado> states;
	private List<Cidade> cities;
	
	public PessoaBO() {
		
		setStates(new ArrayList<Estado>());
		setCities(new ArrayList<Cidade>());
		
		setPdao(new PessoaDao());
		setPessoa(new Pessoa());
		setCorretor(new Corretor());
		
		setContato(new Contato());
		setLogin(new Login());
		setEndereco(new Endereco());
		setBairro(new Bairro());
		setCidade(new Cidade());
		setEstado(new Estado());
	}
	
	public List<Estado> getListEstados( ) {
		setStates( new EstadoDao().getEstados() );
		return getStates();
	}
	
	public void getEstadoSelected( AjaxBehaviorEvent event) {
		UISelectOne select = (UISelectOne) event.getSource();
		String valor = String.valueOf(select.getValue());
		
		setCities( new CidadeBO().getCidadesFlags( valor ) );
	}
	
	public void getSelectedEstado( ) {
		
		if( getEstado().getEstado() != null && !("").equals(getEstado().getEstado()) )
			setCities( new CidadeBO().getCidadesFlags( getEstado().getEstado() ) );
		else
			setCities( new ArrayList<Cidade>() );
	}
	
	public List<Cidade> getListCidades() {
		return getCities();
	}
	
	
//	CRUD
	public void adicionarPessoa( ActionEvent event ) {
		System.out.println("hello");
		getEstado().setPais( new Pais(1, "Brasil") );
		
		for (int i = 0; i < getEstados().length; i++) {
			if( getEstados()[i].getEstado().equals( getEstado().getEstado() )  ) {
				getEstado().setEstadoId( getEstados()[i].getNumero() );
				getEstado().setUf( getEstados()[i].getSigla() );
			}
		}
		
		System.out.println("cidadeA: "+getCidade());
		
		getCidade().setEstado( getEstado() );
		getBairro().setCidade( getCidade() );
		getEndereco().setBairro( getBairro() );
		getPessoa().setEndereco( getEndereco() );
		getPessoa().setContato(getContato());
		getPessoa().setLogin(getLogin());
		
		pdao.adicionarPessoa(getPessoa());
		
		getCorretor().setPessoa(getPessoa());
		
		new CorretorDao().adicionarCorretor(getCorretor());
		
	}
	
	public void removerPessoa(  ) {
		pdao.removerPessoa(getPessoa());
	}
	
	public void atualizarPessoa(  ) {
		pdao.atualizarPessoa(getPessoa());
	}
	
	public Pessoa getPessoaById(  ) {
		return pdao.getPessoa( getPessoa().getPessoaId() );
	}

	public List<Pessoa> getAllPessoas( ) {
		return pdao.getPessoas();
	}
//	Fim do CRUD 
	
	
//	Arrays values of Enums
	public Sexo[] getSexos( ) { return Sexo.values(); }
	public ECivil[] getECivis ( ) { return ECivil.values(); }
	public Regime[] getRegimes ( ) { return Regime.values(); }
	public Estados[] getEstados ( ) { return Estados.values(); }
	
//	Getts and Setts
	public void setPdao(PessoaDao pdao) { this.pdao = pdao; }
	public PessoaDao getPdao() { return pdao; }

	public void setPessoa(Pessoa pessoa) { this.pessoa = pessoa; }
	public Pessoa getPessoa() { return pessoa; }
	
	public void setLogin(Login login) { this.login = login; }
	public Login getLogin() { return login; }

	public void setEndereco(Endereco endereco) { this.endereco = endereco; }
	public Endereco getEndereco() { return endereco; }

	public void setBairro(Bairro bairro) { this.bairro = bairro; }
	public Bairro getBairro() { return bairro; }

	public void setCidade(Cidade cidade) { this.cidade = cidade; }
	public Cidade getCidade() { return cidade; }

	public void setEstado(Estado estado) { this.estado = estado; }
	public Estado getEstado() { return estado; }

	public void setContato(Contato contato) { this.contato = contato; }
	public Contato getContato() { return contato; }

	public void setStates(List<Estado> states) { this.states = states; }
	public List<Estado> getStates() { return states; }
	
	public void setCities(List<Cidade> cities) { this.cities = cities; }
	public List<Cidade> getCities() { return cities; }

	public void setCorretor(Corretor corretor) { this.corretor = corretor; }
	public Corretor getCorretor() { return corretor; }
	
}